package main

import (
	"encoding/json"
	"fmt"

	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
	dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
	domain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain/v20180808"
)

// RecordList 结构体定义，用于解析 JSON 中的 RecordList 字段
type RecordList struct {
	RecordId      int    `json:"RecordId"`
	Value         string `json:"Value"`
	Status        string `json:"Status"`
	UpdatedOn     string `json:"UpdatedOn"`
	Name          string `json:"Name"`
	Line          string `json:"Line"`
	LineId        string `json:"LineId"`
	Type          string `json:"Type"`
	MonitorStatus string `json:"MonitorStatus"`
	Remark        string `json:"Remark"`
	TTL           int    `json:"TTL"`
	MX            int    `json:"MX"`
	Weight        int    `json:"Weight"`
}

// Response 结构体定义，用于解析 JSON 中的 Response 字段
type Response struct {
	RecordCountInfo struct {
		SubdomainCount int `json:"SubdomainCount"`
		ListCount      int `json:"ListCount"`
		TotalCount     int `json:"TotalCount"`
	} `json:"RecordCountInfo"`
	RecordList []RecordList `json:"RecordList"`
	RequestId  string       `json:"RequestId"`
}

// 整个 JSON 结构的根结构体定义
type Root struct {
	Response Response `json:"Response"`
}

// 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey，此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议采用更安全的方式来使用密钥，请参见：https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
var credential = common.NewCredential(
	"AKIDgYO5gZZXJLFzb9jaTSct00vyzvfIm5EV",
	"GYF886tTwSPTPPdonhaQ4fCmSQF46HRU",
)

// 腾讯云获取全部域名
func getAllDomain() {
	// 实例化一个client选项，可选的，没有特殊需求可以跳过
	cpf := profile.NewClientProfile()
	cpf.HttpProfile.Endpoint = "domain.tencentcloudapi.com"
	// 实例化要请求产品的client对象,clientProfile是可选的
	client, _ := domain.NewClient(credential, "", cpf)

	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := domain.NewDescribeDomainNameListRequest()

	// // 设置请求参数
	// request.Domain = &domain
	// request.SubDomain = &subDomain
	// request.RecordType = &recordType
	// request.RecordLine = common.StringPtr("默认")
	// request.Value = &recordValue
	// 返回的resp是一个DescribeDomainNameListResponse的实例，与请求对象对应
	response, err := client.DescribeDomainNameList(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return
	}
	if err != nil {
		panic(err)
	}
	// 输出json格式的字符串回包
	fmt.Printf("%s", response.Response.DomainSet)
}

// 获取域名所有解析
func getDomainAllDes() {
	// 实例化一个client选项，可选的，没有特殊需求可以跳过
	cpf := profile.NewClientProfile()
	cpf.HttpProfile.Endpoint = "dnspod.tencentcloudapi.com"
	// 实例化要请求产品的client对象,clientProfile是可选的
	client, _ := dnspod.NewClient(credential, "", cpf)

	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := dnspod.NewDescribeRecordListRequest()

	request.Domain = common.StringPtr("alleniverrui.top")

	// 返回的resp是一个DescribeRecordListResponse的实例，与请求对象对应
	response, err := client.DescribeRecordList(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return
	}
	if err != nil {
		panic(err)
	}
	// 输出json格式的字符串回包
	// fmt.Printf("%s", response.ToJsonString())
	// 使用定义的结构体类型进行解析
	var result Root
	err2 := json.Unmarshal([]byte(response.ToJsonString()), &result)
	if err2 != nil {
		fmt.Println("Error decoding JSON:", err)
		return
	}

	// 打印解析结果
	fmt.Printf("Subdomain Count: %d\n", result.Response.RecordCountInfo.SubdomainCount)
	fmt.Printf("List Count: %d\n", result.Response.RecordCountInfo.ListCount)
	fmt.Printf("Total Count: %d\n", result.Response.RecordCountInfo.TotalCount)

	// 遍历 RecordList 字段
	for _, record := range result.Response.RecordList {
		fmt.Printf("Record ID: %d, Name: %s, Value: %s, Type: %s\n", record.RecordId, record.Name, record.Value, record.Type)
	}
}
func addDomainDes() {
	cpf := profile.NewClientProfile()
	cpf.HttpProfile.Endpoint = "dnspod.tencentcloudapi.com"
	// 实例化要请求产品的client对象,clientProfile是可选的
	client, _ := dnspod.NewClient(credential, "", cpf)

	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := dnspod.NewCreateRecordRequest()

	request.Domain = common.StringPtr("alleniverrui.top")
	request.SubDomain = common.StringPtr("陈锐")
	request.RecordType = common.StringPtr("显性URL")
	request.RecordLine = common.StringPtr("默认")
	request.Value = common.StringPtr("http://alleniverrui.top")

	// 返回的resp是一个CreateRecordResponse的实例，与请求对象对应
	response, err := client.CreateRecord(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return
	}
	if err != nil {
		panic(err)
	}
	// 输出json格式的字符串回包
	fmt.Printf("%s", response.ToJsonString())
}
func main() {
	getDomainAllDes()
}
